﻿#!/bin/bash
#author:Castle Moriarty
# date:2025-10-29

## 自动重启php-fpm服务

## 写一个自动化重启服务脚本，当访问日志频繁出现502状态码时，重启php-fpm服务
## 假定Ngnix访问日志路径为/data/logs/www_access.log
## 重启php-fpm服务的命令为systemctl restart php-fpm
## 脚本可以每分钟执行一次，脚本执行时截取上一分钟的日志，可以计算日志行数，和出现502的行数，计算比例，这里我给大家定一个比例吧，超过20%就算是有问题了




## 日志文件
logfile="/data/logs/www_access.log"

## 上一分钟，关键词
last_t=`date -d "-1 min" +%Y:%H:%M`

## 把最后1万行日志截取出来，然后从这里面再过滤上一分钟的日志
tail -n 10000 $logfile |grep "/${last_t}:" >/tmp/last.log

## 计算上一分钟日志有多少行
last_1min_c=`wc -l /tmp/last.log|awk '{print $1}'`

## 再计算状态码为502的日志有多少行
s502_c=`grep -c '" 502 "' /tmp/last.log`

## 计算百分比，这里我们把数字乘以100，方便后续对比
p=`echo "scale=2; ${s502_c}*100/${last_1min_c}"|bc|sed 's/\.//'`

## 如果百分比超过20
if [ $p -gt 2000 ]
then
  echo "`date` 502日志大于20%，需要重启php-fpm服务" >> /tmp/restart_php-fpm.log
  systemctl restart php-fpm
fi

rm -f /tmp/last.log

